package Reproductor;

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.FloatControl;
import javax.swing.JOptionPane;

/**
 * @author Grupo 04 Clase que se encarga de reproducir un sonido (efectos) que
 *         no son mp3, son wav mediante la libreria que proporciona JAVA.
 * 
 */
public class Sonido extends Thread {
	private String nombreEfecto;
	private Clip sonido;

	/**
	 * Recibe el nombre del efecto
	 * 
	 * @param nombreEfectop
	 *            nombre del efecto de sonido, el archivo sera /"nombre".wav
	 */
	public Sonido(String nombreEfectop) {
		nombreEfecto = nombreEfectop;
	}

	/**
	 * Modifica el volumen de los efectos.
	 * 
	 * @param volumen
	 *            valor del volumen de 0 a 100
	 */
	public void modificarVolumen(float volumen) {
		if (volumen > 100) {
			volumen = 100;
		} else {
			if (volumen < 0) {
				volumen = 0;
			}
		}
		try {
			FloatControl volume = (FloatControl) sonido
					.getControl(FloatControl.Type.MASTER_GAIN);
			// Para calcular el volumen bien, interpolacion lineal
			volume.setValue((float) (volume.getMinimum() * (1 - volumen / 100))
					+ (volume.getMaximum() * (volumen / 100)));
			// En caso de que no haya nada reproduciendose y sonido sea null
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void run() {
		try {

			// Se obtiene un sonido
			sonido = AudioSystem.getClip();
			// Se carga con un fichero wav
			// HAY QUE SACAR DE BASE DE DATOS
			sonido.open(AudioSystem.getAudioInputStream(getClass().getResource(
					"/" + nombreEfecto + ".wav")));
			sonido.loop(0);
			Thread.sleep(50);
			while (sonido.isRunning()) {
				sleep(1); // Sleep introducido para que lea las interrupciones
							// (en java 1.7 no reaccioan si no hay comandos
							// entre el while y la interrupcion)
				if (interrupted()) {
					sonido.stop();
					sonido.close();
					break;
				}
			}
			// Se cierra
			sonido.close();
		}
		// Cuando interrumpe el sleep
		catch (InterruptedException e) {
			sonido.stop();
			sonido.close();
		}
		// Si no encuentra el archivo a reproducir
		catch (Exception e) {
			System.out.println("File not found");
			JOptionPane.showMessageDialog(null, "File not found");
		}
	}

}